﻿using System.Web.UI.WebControls;
using WebHelper;
using WebHelper.Controles;
using WebHelper.Controles.Interfaces;
using System;

namespace IU.Generico
{
    public partial class ControlArbol : ControlGenerico, ITitulo
    {
        AbstractNodo raiz;
        public AbstractNodo Raiz
        {
            get { return raiz; }
            set { raiz = value; }
        }

        public int Width
        {
            get { return (int)tree.Width.Value; }
            set { tree.Width = Unit.Pixel(value); }
        }

        public int Height
        {
            get { return (int)tree.Width.Value; }
            set { tree.Width = Unit.Pixel(value); }
        }

        public override void FantasmearControl(Storer st)
        {
            if(Raiz.GetType() == typeof(Nodo))
                tree.Root.Add(GenerarNodo((Nodo)Raiz));
            else
                tree.Root.Add(GenerarNodo((Nodo)Raiz));
        }

        protected Ext.Net.TreeNode GenerarNodo(Nodo nodo)
        {
            Ext.Net.TreeNode root = new Ext.Net.TreeNode(nodo.Nombre);
            foreach (object o in nodo.ObtenerEntidades())
            {
                Storer st = new Storer(nodo.Tipo, o);
                Ext.Net.TreeNode child = new Ext.Net.TreeNode(
                    st.GetValue(nodo.AtributoId).ToString(),
                    nodo.GetTitulo(st),
                    Ext.Net.Icon.None);
                root.Nodes.Add(child);
            }
            foreach (var hijo in nodo.Hijos)
            {
                if(hijo.GetType() == typeof(Nodo))
                    root.Nodes.Add(GenerarNodo((Nodo)hijo));
                else
                    root.Nodes.Add(GenerarNodo((NodoLite)hijo));
            }
            return root;
        }

        protected Ext.Net.TreeNode GenerarNodo(NodoLite nodo)
        {
            Ext.Net.TreeNode root = new Ext.Net.TreeNode(nodo.Nombre);
            foreach (object o in nodo.ObtenerEntidades())
            {
                Storer st = new Storer(o.GetType(), o);
                Ext.Net.TreeNode child = new Ext.Net.TreeNode(
                    st.GetValue(nodo.AtributoId).ToString(),
                    nodo.GetTitulo(st),
                    Ext.Net.Icon.None);
                root.Nodes.Add(child);
            }
            foreach (var hijo in nodo.Hijos)
            {
                if (hijo.GetType() == typeof(Nodo))
                    root.Nodes.Add(GenerarNodo((Nodo)hijo));
                else
                    root.Nodes.Add(GenerarNodo((NodoLite)hijo));
            }
            return root;
        }

        #region ITitulo Members

        public string Titulo
        {
            get
            {
                return tree.Title;
            }
            set
            {
                tree.Title = value;
            }
        }

        #endregion
    }
}